home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DP Tool Club 19
/
CD_ASCQ_19_010295.iso
/
dos
/
prg
/
pas
/
swag
/
misc.swg
/
0047_Modify EXE Constants.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1993-11-02
|
2KB
|
112 lines
{
JON JASIUNAS
>Is it possible to store variables in actual .EXE file of a TP program, inste
>of making an external config file for it? Thanks.
Sure. Make them typed constants, then modify the .EXE whenever you want
to store a change.
}
type
tOwnerName = string[30];
tRegCode = String[12];
const
OwnerName : tOwnerName = '';
RegCode : tRegCode = '';
begin
WriteLn('The current owner is : ', OwnerName);
WriteLn('The current registration code is : ', RegCode);
WriteLn;
Write('Enter the new owner name: ');
ReadLn(OwnerName);
Write('Enter the new registration code: ');
ReadLn(RegCode);
If Write2Exe(OwnerName, SizeOf(OwnerName)) <> 0 then
WriteLn('Owner name not updated!');
If Write2Exe(RegCode, SizeOf(RegCode)) <> 0 then
WriteLn('Registration code not updated!');
end.
{ Here's my self mod unit: }
{*****************************
* EXEMOD.PAS v1.0 *
* *
* General purose .EXE *
* self-modifying routines *
*****************************
1992-93 HyperDrive Software
Released into the public domain.}
{$S-,R-,D-,I-}
{$IFOPT O+}
{$F+}
{$ENDIF}
unit ExeMod;
interface
var
ExeName : String;
function Write2Exe(var Data2Write; DataSize : Word) : Integer;
implementation
function Write2Exe(var Data2Write; DataSize : Word): Integer;
const
PrefixSize = 256;
var
ExeFile : File;
HeaderSize : Word;
IoError : Integer;
begin
Assign(ExeFile, ExeName);
Reset(ExeFile, 1);
IoError := IOResult;
If IoError = 0 then
{-Seek position of header size in EXE File }
begin
Seek(ExeFile, 8);
IoError := IOResult;
end; { If }
If IoError = 0 then
{-Read header size in EXE File }
begin
BlockRead(ExeFile, HeaderSize, Sizeof(HeaderSize));
IoError := IOResult;
end;
If IoError = 0 then
{-Seek position of Data in EXE File }
begin
Seek(ExeFile, LongInt(16) * (HeaderSize + Seg(Data2Write) - PrefixSeg) +
IoError := IOResult;
end;
If IoError = 0 then
{-Write new Data to EXE File }
begin
BlockWrite(ExeFile, Data2Write, DataSize);
IoError := IOResult;
end;
Close(ExeFile);
Write2Exe := IoError;
end;
begin
ExeName := ParamStr(0);
end.